package Control;

import Clases.Asignarprestamo;
import Clases.Prestamo;
import Gestor.GestorPrestamo;
import java.math.BigInteger;
import java.util.ArrayList;
import java.sql.Date;

public class ControlPrestamo {

    private static ControlPrestamo instancia = null;
    private final GestorPrestamo gestorPrestamo = GestorPrestamo.obtenerInstancia();

    public static ControlPrestamo obtenerInstancia() {
        if (instancia == null) {
            instancia = new ControlPrestamo();
        }
        return instancia;
    }

    private ControlPrestamo() {
    }

    public int insertarPrestamo(Prestamo prestamo) {
        return (Integer) gestorPrestamo.insertar(prestamo);

    }

    public void ModificarPrestamo(Prestamo prestamo) {
        gestorPrestamo.actualizar(prestamo);
    }

    public boolean eliminarPrestamo(Prestamo prestamo) {
        return gestorPrestamo.eliminar(prestamo);
    }

    public ArrayList<Prestamo> obtenerListaPrestamos() {
        ArrayList< Prestamo> prestamos = gestorPrestamo.getListaPrestamosActuales();
        return prestamos;
    }

    public ArrayList<Prestamo> getPrestamoPorCodigoEmpleado(long codigo, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorPrestamo.getPrestamosPorCodigoEmpleado(codigo, fechaPagoInicio, fechaPagoFin);
    }

    public ArrayList<Prestamo> getPrestamoPorCedula(long cedula, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorPrestamo.getPrestamosPorCedula(cedula, fechaPagoInicio, fechaPagoFin);
    }

    public boolean asignarPrestamoEmpleado(Asignarprestamo asignacion) {
        return gestorPrestamo.asignarPrestamoEmpleado(asignacion);
    }

    public int getUltimoPrestamoIngresado() {
        return gestorPrestamo.getUltimoIngresado();
    }

    public ArrayList<java.math.BigInteger> getAsignacionPrestamo(long numEmpleado) {
        ArrayList<java.util.Date> fechaPagoActual = ControlPago.obtenerInstancia().getPago();
        java.sql.Date sqlDate1 = new java.sql.Date(((java.util.Date) fechaPagoActual.get(0)).getTime());
        return gestorPrestamo.getAsignacionPrestamo(numEmpleado,sqlDate1);
    }

    public Prestamo getPrestamoPorCodigo(int codigo) {
        return gestorPrestamo.getPrestamoPorCodigo(codigo);
    }

    public void desasignarPrestamo(Asignarprestamo asignacion) {
        gestorPrestamo.eliminar(asignacion);
    }

    public boolean desactivarAsignacionPrestamo(Prestamo prestamo) {
        return gestorPrestamo.actualizar(prestamo);
    }

    public ArrayList<java.math.BigInteger> getAsignacionPrestamoHistoricos(Long cedulaEmpleado, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorPrestamo.getAsignacionPrestamoHistoricos(cedulaEmpleado, fechaPagoInicio, fechaPagoFin);
    }
}
